package com.campus.app.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.commons.entity.CheckClass;
import com.campus.commons.utils.Result;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Repository;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 查班表 服务类
 * </p>
 *
 * @author Rin
 * @since 2020-12-24
 */
@Repository
public interface CheckClasssService extends IService<CheckClass> {
    /**
     * 查班的缓存，
     * key1 上下午
     * key2 教室名称
     */
    public static Map<Integer, Map<String, CheckClass>> checkClassMap = new HashMap<>();

    /**
     * 获取所有查班统计
     *
     * @return 工具对象
     * @param size
     * @param limit
     */
    Result<List<CheckClass>> getCheckClass(int size,int limit);
    /**
     * 查询标红班级 默认是出勤率小于
     *
     * @param work
     * @param page
     * @param limit
     * @return
     */
    Result<List<CheckClass>> getCheckClassByRed(Integer work, int page, int limit);
    /**
     * 复合查询
     *
     * @param start
     * @param end
     * @param size
     * @param limit
     * @param className
     * @param formalWork
     * @return
     */
    Result<List<CheckClass>> getCheckClassByDate(String start, String end, int size,int limit, String className, @Min(1)@Max(100) int formalWork);

    /**
     * 删除一条记录
     * @param id
     * @return
     */
    Result del(@NotNull@Min(1) Integer id);

    /**
     * 修改方法
     * @param checkClass
     * @return
     */
    Result upDate(@NotNull CheckClass checkClass);

    /**
     * 前台缓存添加数据
     * @param checkClass 查班对象
     * @return 工具
     */
    Result addCheckClassMap(@NotNull CheckClass checkClass);

    /**
     * 修改缓存数据,(与上一个方法一样，但是别用上一个进行修改)
     *
     * @param checkClass 查班对象
     * @return 工具
     */
    Result upCheckClassMap(@NotNull  CheckClass checkClass);

    Result getCacheMap();
    /**
     * 删除缓存数据
     *
     * @param classRoomName 教室名称
     * @return 工具
     */
    Result delCheckClassMap(@NotNull String classRoomName);

    /**
     * 导出表格
     */
    @Scheduled(cron = "* * 20 * * ? ")
    void exportExcelForClass();

    /**
     * 获取一条查班记录
     * @param id
     * @return
     */
    Result<CheckClass> getacheckclassrecord(int id);
}
